package com.larry

/**
 * 排名
 */
object Scala_Collection_WordCount {

  def main(args: Array[String]): Unit = {

    val list = List(
      ("zhangsan", "河北", "鞋"),
      ("lisi", "河北", "衣服"),
      ("wangwu", "河北", "鞋"),
      ("zhangsan", "河南", "鞋"),
      ("lisi", "河南", "衣服"),
      ("wangwu", "河南", "鞋"),
      ("zhangsan", "河南", "鞋"),
      ("lisi", "河北", "衣服"),
      ("wangwu", "河北", "鞋"),
      ("zhangsan", "河北", "鞋"),
      ("lisi", "河北", "衣服"),
      ("wangwu", "河北", "帽子"),
      ("zhangsan", "河南", "鞋"),
      ("lisi", "河南", "衣服"),
      ("wangwu", "河南", "帽子"),
      ("zhangsan", "河南", "鞋"),
      ("lisi", "河北", "衣服"),
      ("wangwu", "河北", "帽子"),
      ("lisi", "河北", "衣服"),
      ("wangwu", "河北", "电脑"),
      ("zhangsan", "河南", "鞋"),
      ("lisi", "河南", "衣服"),
      ("wangwu", "河南", "电脑"),
      ("zhangsan", "河南", "电脑"),
      ("lisi", "河北", "衣服"),
      ("wangwu", "河北", "帽子")
    )

    //(河北-鞋,1), (河北-衣服,1), (河北-鞋,1)
    val tuples = list.map(
      t => {
        (t._2 + "-" + t._3, 1)
      }
    )


    //河南-衣服 -> List((河南-衣服,1), (河南-衣服,1), (河南-衣服,1))
    val newTuples = tuples.groupBy(_._1)

    //河南-衣服 -> 3, 河北-衣服 -> 6, 河南-帽子 -> 1, 河北-鞋 -> 4, 河南-电脑 -> 2, 河南-鞋 -> 6, 河北-电脑 -> 1, 河北-帽子 -> 3
    val newTuples2 = newTuples.mapValues(_.size)

    //List((河南,(衣服,3)), (河北,(衣服,6)), (河南,(帽子,1)), (河北,(鞋,4)), (河南,(电脑,2)), (河南,(鞋,6)), (河北,(电脑,1)), (河北,(帽子,3)))
    val mapdata = newTuples2.toList.map(
      m => {
        val keys = m._1.split("-")
        val value = m._2
        (keys(0), (keys(1),value))
      }
    )

    //Map(河南 -> List((河南,(衣服,3)), (河南,(帽子,1)), (河南,(电脑,2)), (河南,(鞋,6))), 河北 -> List((河北,(衣服,6)), (河北,(鞋,4)), (河北,(电脑,1)), (河北,(帽子,3))))
    val mapdata2 = mapdata.groupBy(_._1)

    //Map(河南 -> List((衣服,3), (帽子,1), (电脑,2), (鞋,6)), 河北 -> List((衣服,6), (鞋,4), (电脑,1), (帽子,3)))
    val mapdata3 = mapdata2.map(
      l => {
        (l._1, l._2.map(_._2).sortBy(_._2)(Ordering.Int.reverse))
      }
    )

    //Map(河南 -> List((鞋,6), (衣服,3), (电脑,2), (帽子,1)), 河北 -> List((衣服,6), (鞋,4), (帽子,3), (电脑,1)))
    println(mapdata3)


  }


}
